package deposito.integracion;

import java.net.URL;

import javax.ejb.Stateless;
import javax.xml.ws.BindingProvider;

import com.sun.xml.internal.ws.client.BindingProviderProperties;

import deposito.dto.Parametro;
import deposito.exceptions.DepositoException;
import deposito.integracion.webservice.WSMonitoreo;
import deposito.integracion.webservice.WSMonitoreoService;
import deposito.service.LogDeErrores;


@Stateless
public class EmisorLogWS implements IEmisorLogWS{
	
	//enviarLogWS
	public String enviarLogWS(Parametro config , String message) throws DepositoException{
		
		String endpoint = "http://"+config.getDireccion()+":"+String.valueOf(config.getPuerto())+config.getNombreServicio();
		try{
			ClassLoader classLoader = getClass().getClassLoader();
	        URL urlWSDL= classLoader.getResource ("/recursos/WSMonitoreo.wsdl");

	        WSMonitoreoService lmWS = new WSMonitoreoService(urlWSDL);
	        WSMonitoreo puerto = lmWS.getWSMonitoreoPort();
			
			//Cambio la URL del WS y seteo timeout
			((BindingProvider)puerto).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint); 
			((BindingProvider)puerto).getRequestContext().put(BindingProviderProperties.REQUEST_TIMEOUT, 5000); 
			((BindingProvider)puerto).getRequestContext().put(BindingProviderProperties.CONNECT_TIMEOUT, 500); 
			
			String respuestaWS = puerto.enviarInformeAuditoria(message);
			return respuestaWS;
		}
		catch (Exception e) {
			String textoError = ("Error al conectar con Web Service de "+config.getNombreModulo()+". Endpoint: "+endpoint);
			LogDeErrores.getInstancia().crearLogDeErrores(textoError, e.getMessage(), LogDeErrores.getInstancia().getStackTrace(e.getStackTrace()));
			throw new DepositoException(textoError);
		}
	}
	
}
